DRY (Don’t Repeat Yourself) — принцип, согласно которому каждый фрагмент знания должен существовать в системе только в одном месте. Никакого копипаста и дублирующей логики.
Проблема: дублирование валидации
// Пример плохого кода if (user.Age < 18) throw new Exception("User must be at least 18");
...
if (user.Age < 18) return BadRequest("User must be at least 18");
При изменении правила — нужно помнить обновить его везде. Ловушка копипаста.
Решение: вынос логики в общее правило
public static class ValidationRules { public static bool IsAdult(User user) => user.Age >= 18; }
Теперь в коде
if (!ValidationRules.IsAdult(user)) throw new Exception("User must be at least 18");
// И в другом месте: if (!ValidationRules.IsAdult(user)) return BadRequest("User must be at least 18");
Альтернатива: использование FluentValidation или DataAnnotations
public class User { [Range(18, int.MaxValue, ErrorMessage = "User must be at least 18")] public int Age { get; set; } }
Где чаще всего нарушают DRY в .NET:
• Повторяющиеся SQL-запросы и фильтры • Повторение одинаковых exception'ов, логов, сообщений • Дублирование конфигурации • UI-формы и компоненты
DRY (Don’t Repeat Yourself) — принцип, согласно которому каждый фрагмент знания должен существовать в системе только в одном месте. Никакого копипаста и дублирующей логики.
Проблема: дублирование валидации
// Пример плохого кода if (user.Age < 18) throw new Exception("User must be at least 18");
...
if (user.Age < 18) return BadRequest("User must be at least 18");
При изменении правила — нужно помнить обновить его везде. Ловушка копипаста.
Решение: вынос логики в общее правило
public static class ValidationRules { public static bool IsAdult(User user) => user.Age >= 18; }
Теперь в коде
if (!ValidationRules.IsAdult(user)) throw new Exception("User must be at least 18");
// И в другом месте: if (!ValidationRules.IsAdult(user)) return BadRequest("User must be at least 18");
Альтернатива: использование FluentValidation или DataAnnotations
public class User { [Range(18, int.MaxValue, ErrorMessage = "User must be at least 18")] public int Age { get; set; } }
Где чаще всего нарушают DRY в .NET:
• Повторяющиеся SQL-запросы и фильтры • Повторение одинаковых exception'ов, логов, сообщений • Дублирование конфигурации • UI-формы и компоненты
That strategy is the acquisition of a value-priced company by a growth company. Using the growth company's higher-priced stock for the acquisition can produce outsized revenue and earnings growth. Even better is the use of cash, particularly in a growth period when financial aggressiveness is accepted and even positively viewed.he key public rationale behind this strategy is synergy - the 1+1=3 view. In many cases, synergy does occur and is valuable. However, in other cases, particularly as the strategy gains popularity, it doesn't. Joining two different organizations, workforces and cultures is a challenge. Simply putting two separate organizations together necessarily creates disruptions and conflicts that can undermine both operations.
NEWS: Telegram supports Facetime video calls NOW!
Secure video calling is in high demand. As an alternative to Zoom, many people are using end-to-end encrypted apps such as WhatsApp, FaceTime or Signal to speak to friends and family face-to-face since coronavirus lockdowns started to take place across the world. There’s another option—secure communications app Telegram just added video calling to its feature set, available on both iOS and Android. The new feature is also super secure—like Signal and WhatsApp and unlike Zoom (yet), video calls will be end-to-end encrypted.